
using System.Collections.Generic;

namespace Game.DataStruct
{
    /// <summary>
    /// 安全的字典，在取不到值时，不抛异常，而是新建一个默认的TValue。
    /// <para>PS：值必须是可new的，且会保持默认值，用于多重字典下，不想每次在未取到值时手动新建值的场合。</para>
    /// </summary>
    /// <typeparam name="TKey">key</typeparam>
    /// <typeparam name="TValue">value</typeparam>
    public class SafeDictionary<TKey, TValue> : Dictionary<TKey, TValue> where TValue : new()
    {
        /// <summary>
        /// 对于Dictionary的索引器重写，在取不到值时新建默认值
        /// </summary>
        /// <param name="key"></param>
        /// <returns></returns>
        public new TValue this[TKey key]
        {
            get
            {
                if (!ContainsKey(key))
                {
                    base.Add(key, new TValue());
                }

                return base[key];
            }
            set
            {
                base[key] = value;
            }
        }
    }
}